perm filename B[P11,LCS]1 blob sn#519476 filedate 1980-06-30 generic text, type T, neo UTF8
116	CALL SUB
C CALLS FAIL VERSION
	RETURN
CC116      DO 1016 J3=0,NSAMX    
CC	IF(M1.GT.0)XIN1=ROUT(J3+L1)
CC  	IF(M2.GT.0)XIN2=ROUT(L2+J3)
CC    ROUT(J3+L3)=XIN1-XIN2      
CC 1016  CONTINUE    
CC    RETURN      

C RANDOM INTERPOLATING GENERATOR   RAI Px Py Bn Pq Pr Ps; OR RAI L1 L2 L3 L4 L5 L6;
C M1=0=Pn   M1=1=Bn
 104  SUM=RNT(L4)      
	  RN1=RNT(L5)  
      RN3=RNT(L6)  
	IF(SUM.NE.0)GO TO 313
	CALL RNDM(RN1)
	CALL RNDM(RN3)
C INIT THE RANDOM NUMBERS.
313      DO 340 J3=0,NSAMX    
	IF(M1.GT.0)XIN1=ROUT(J3+L1)     
    	IF(M2.GT.0)XIN2=ROUT(J3+L2)     
      IF(XNFUN.GT.SUM)GO TO 320
      SUM=SUM-XNFUN      
	CALL RNDM(RN4)
304      RN2=RN4-RN3 
      RN1=RN3     
      RN3=RN4     
      GO TO 321     
 320  RN2=RN3-RN1 
321   ROUT(J3+L3)=XIN1*(RN1+(RN2*SUM)/XNFUN)   
      SUM=SUM+XIN2
 340  CONTINUE    
      RNT(L4)=SUM       
      RNT(L5)=RN1  
      RNT(L6)=RN3  
      RETURN      

C     ENVELOPE GENERATOR   ENV PorB, ForP, B,  P,   P,   P,  P,  P;
C			       AMPL FUNC OUT ATCK STDY DCAY FLAG STOR
C FLAG=1=NO CONTINUATION, REINITS FOR EACH NOTE AND CAN PLAY ON TOP OF SELF.
C FLAG=0=INIT CONTINUATION FOR SEVERAL NOTES UNDER 1 ENV.
C -1=CONTINUATION	(USE DIFFERENT INS. NUMS FOR CHORDS!!)
105	L9=RNT(I3)
C  GET INS. NUM.
	ENVX=RNT(L7)
	IF(ENVX)805,605,905
905	SUM=RNT(L8)
	GO TO 705
805	SUM=ENVP(L9)      
	GO TO 705
605	SUM=0
	RNT(L7)=-1.
705	CALL LOCGEN(M2,L2)
C  FINDS POINTER TO FUNC NUM.  IF M2.EQ.1 THEN FNUM WAS IN INST DEF. 
      XIN4=RNT(L4)
      XIN5=RNT(L5)
      XIN6=RNT(L6)
      XIN5=PINCR/(PINCR/XIN5 - PINCR/XIN4 -PINCR/XIN6 )
C XIN5 HAS INCR. VALUE OF STEADY STATE. (IT WAS TOTAL DUR. BEFORE.)
C THESE 3 PARAMS ARE ATTACK DUR, TOTAL DUR, DECAY DUR.
C  STEADY STATE TIME IS COMPUTED
      XIN4=XIN4/4.
      XIN5=XIN5/4.
      XIN6=XIN6/4.
	X1=128.
	X2=256.
	X3=384.
C THESE NUMBERS BASED ON USING 3/4 OF 512 ARRAY.
      DO 205 J3=0,NSAMX    
      J4=INT(SUM)+L2     
      F=GENS(J4)     
	IF(M1.GT.0)AMP =ROUT(J3+L1)      
   	IF(SUM.GE.384.)SUM=0
C FOR WRAP-AROUND
   	IF(SUM.GE.128.)GO TO 305
C JUMP IF ATTACK BOUNDRY IS PASSED.
      SUM=SUM+XIN4       
      GO TO 405    
305	IF(SUM.GE.256.)GO TO 505
C JUMP IF STEADY STATE BOUNDRY IS PASSED.
      SUM=SUM+XIN5       
      GO TO 405    
505   SUM=SUM+XIN6       
 405  J7=L3+J3
      ROUT(J7)=AMP*F     
 205  CONTINUE   
	IF(ENVX.LE.0)GO TO 1005
	RNT(L8)=SUM
	RETURN
1005  ENVP(L9)=SUM       
      RETURN     

C     STEREO OUTPUT BOX  L1,L2 = B       L3=B1
C IT IS ASSUMED ALL INPUTS ARE 'B' TYPE.
106   NSSAM=2*NSAM       
C  6/29/70  L.C.SMITH
      ICT=0
      DO 206 J3=1,NSSAM,2  
      J4=L1+ICT
      XIN1=ROUT(J4)  
 306  J5=L3+J3-1 
      ROUT(J5)=XIN1+ROUT(J5)    
506   J4=L2+ICT
      XIN2=ROUT(J4)  
 406  J5=L3+J3   
      ROUT(J5)=XIN2+ROUT(J5)    
 206  ICT=ICT+1  
      RETURN     

C     ADD 3 BOX  
107   	IF(M3.LE.0)XIN3=RNT(L3)  
      DO 780 J3=0,NSAMX    
	IF(M1.GT.0)XIN1=ROUT(L1+J3)
   	IF(M2.GT.0)XIN2=ROUT(L2+J3)
   	IF(M3.GT.0)XIN3=ROUT(L3+J3)
      ROUT(J3+L4)=XIN1+XIN2+XIN3  
 780  CONTINUE   
      RETURN     

C     ADD 4 BOX  
108      IF(M3.LE.0)XIN3=RNT(L3)  
      IF(M4.LE.0)XIN4=RNT(L4)  
      DO 880 K=0,NSAMX    
      IF(M1.GT.0)XIN1=ROUT(L1+K)  
 859  IF(M2.GT.0)XIN2=ROUT(L2+K)
      IF(M3.GT.0)XIN3=ROUT(L3+K)
 863  IF(M4.GT.0)XIN4=ROUT(L4+K)
      ROUT(L5+K)=XIN1+XIN2+XIN3+XIN4      
880   CONTINUE   
      RETURN     

C     MULTIPLIER 
109	CALL MLT
C CALLS FAIL VERSION
	RETURN
CC109      DO 908 J3=0,NSAMX
CC    IF(M1.GT.0)XIN1=ROUT(J3+L1)
CC    IF(M2.GT.0)XIN2=ROUT(J3+L2)
CC    ROUT(J3+L3)=XIN1*XIN2
CC 908  CONTINUE   
CC    RETURN     

C 110 DIVIDER
110	CALL DIV
C CALLS FAIL VERSION
	RETURN
CC110      DO 1010 J3=0,NSAMX
CC    IF(M1.GT.0)XIN1=ROUT(J3+L1)
CC    IF(M2.GT.0)XIN2=ROUT(J3+L2)
CC1010      ROUT(J3+L3)=XIN1/XIN2
CC    RETURN     


C     SET NEW FUNCTION IN OSC OR ENV     
C 'SET' NO LONGER NEEDED!!!!  NOW 110 CAN BE USED FOR SOMETHING ELSE.

C     RANDOM AND HOLD GENERATOR     RAH Px Py Bn Pq Pr; OR RAH L1 L2 L3 L4 L5;
C M1=0=Pn   M1=1=Bn
 111  SUM=RNT(L4)       
 913  RN=RNT(L5)  
	IF(SUM.EQ.0)CALL RNDM(RN)
C TO INIT RANDOM NUMB.  (COULD THIS EVER LOSE?)
      DO 940 J3=0,NSAMX    
      IF(M1.GT.0) XIN1=ROUT(J3+L1)      
      IF(M2.GT.0) XIN2=ROUT(J3+L2)      
      IF(XNFUN.GT.SUM)GO TO 920
      SUM=SUM-XNFUN      
	CALL RNDM(RN)
920   ROUT(J3+L3)=XIN1*RN 
      SUM=SUM+XIN2       
 940  CONTINUE   
      RNT(L4)=SUM       
      RNT(L5)=RN  
      RETURN     

      END

	SUBROUTINE RNDM(X)
	X=2.*RAN(X)-1.
C SENDS BACK NUMBER BETWEEN -1 AND +1
	END

	SUBROUTINE LOCGEN(M,L)
	COMMON /NT/RNT(1) /LOCG/LOCG(1)
	IF(M.EQ.0)L=LOCG(INT(RNT(L)))
C GET POINTER TO START OF FUNC. ARRAY
	END